<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>2018/11/29</title>
    <!--好的代码像粥一样,是得用时间和精力熬的。-->
</head>
<body>
<script>
    // var a=[];
    // for(var i=0;i<10;i++){
    //     a[i] = function(){
    //         console.log(i);
    //     };
    // }
    // a[0]();  //10

    // var b=[];
    // for(let i=0; i<10;i++){
    //     b[i] = function(){
    //         console.log(i);
    //     };
    // }
    // b[9](); //9

    //for循环还有一个特别之处，就是设置循环变量
    // 的那部分是一个父作用域，而循环体内部是一个单独的子作用域。
    // for(let i=0;i<3;i++){
    //     let i='abc';
    //     console.log(i);
    // }


    // function myFun(){
    //     for(let i=0;i<10;i++){
    //         console.log(i);
    //     }
    // }
    // myFun();
    // function myFun1(){
    //     for(var i=0;i<10;i++){
    //         console.log(i);
    //     }
    // }
    // myFun1();

    //不存在变量提升
    // console.log(foo);
    // var foo = 2; //undefined
    //
    // console.log(bar);
    // var bar = 2; //报错 ReferenceError

    //暂时性死区
    // var tmp = 123;
    // if(true){
    //     tmp = 'abc';
    //     let tmp;
    // }

    // if (true) {
    //     // TDZ开始
    //     tmp = 'abc'; // ReferenceError: tmp is not defined
    //     console.log(tmp); // ReferenceError
    //
    //     let tmp; // TDZ结束
    //     console.log(tmp); // undefined
    //
    //     tmp = 123;
    //     console.log(tmp); // 123
    // }
    //在let命令申明变量之前 都属于变量的‘死区’
    // typeof x;// ReferenceError: x is not defined
    // let x;

    //如果一个变量根本没有被申明，使用typeof反而不会报错
    // console.log(typeof undeclared_variable);

    // function bar1(x = y,y = 2){
    //     return [x,y];
    // }
    // bar1();  // ReferenceError: y is not defined

    // function bar2(l = 2,p = l){
    //     return [l,p];
    // }
    // bar2();  //[2,2]

    // var x = x;
    // let y = y;  //ReferenceError: y is not defined

    //不允许重复声明
    function func(){
        let a=10;
        var a=1;
    }//undefined  //报错

    function func1(){
        let a=10;
        let a=1;
    }//undefined  //报错

    function func2(arg){
        let arg;//报错
    }//undefined
    function func3(arg){
        {
            let arg; //不报错
        }
    }



</script>

</body>
</html>
